﻿
#include <iostream>
#include <vector>

using namespace std;

//https://vjudge.csgrandeur.cn/problem/POJ-2139

/*
奶牛们最近一直在拍电影，所以它们准备玩一个著名游戏 "凯文-贝肯六度 "的变种。
这个游戏是这样玩的：每头奶牛都被认为与自己相差零度（度数）。
如果两头不同的奶牛一起出演过一部电影，则每头奶牛与另一头奶牛的距离被认为是一个 "度"。
如果两头奶牛从未合作过，但都曾与第三头奶牛合作过，那么它们被视为相差两个 "度"
（计算方法是：与它们合作过的奶牛相差一个 "度"，与另一头奶牛相差一个 "度"）。
这可以扩展到一般情况。

N（2 <= N <= 300）头奶牛想知道哪头牛与所有其他奶牛的平均分离度最小，当然不包括它自己。
奶牛们已经拍摄了 M（1 <= M <= 10000）部电影，可以保证每对奶牛之间都存在某种关系路径。
输入
* 第 1 行 两个空格分隔的整数： N 和 M
* 第 2...M+1行：每行输入包含一组两个或多个空格分隔的整数，描述了在单部影片中出现的奶牛。
第一个整数是参与描述电影的奶牛数量（例如 Mi）；随后的 Mi 整数说明了哪些奶牛参与了电影。
输出
* 第 1 行： 任何一头奶牛的最短平均分离度的 100 倍的单一整数。

4 2
3 1 2 3
2 3 4

100

提示
[奶牛 3 与所有其他奶牛一起工作过，因此有一定的分离度： 1、1 和 1 -- 平均值为 1.00 .]
*/

const int N = 310;
int d[N][N];

int n, m;

void input(const vector<int>& v) {
	for (int i = 0; i < v.size(); i++) {
		for (int j = i + 1; j < v.size(); j++) {
			int a = v[i]; int b = v[j];
			d[a][b] = min(d[a][b], 1);
			d[b][a] = min(d[b][a], 1);
		}
	}
}

void solve() {
	for (int k = 1; k <= n; k++) {
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= n; j++) {
				d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
			}
		}
	}

	double ans = 99999999.0;

	for (int i = 1; i <= n; i++) {
		double sum = 0.0;
		for (int j = 1; j <= n; j++) {
			sum += d[i][j];
		}
		double dl = sum / double(n - 1.0);
		if (dl < ans) 
			ans = dl;
	}

	cout << int(ans * 100) << endl;
}

int main()
{
	cin >> n >> m;
	for (int i = 0; i <= n; i++) {
		for (int j = 0; j <= n; j++) {
			d[i][j] = 0x3f3f3f3f;
			if (i == j)d[i][j] = 0;
		}
	}

	for (int i = 0; i < m; i++) {
		int cnt, t;
		cin >> cnt;
		vector<int> v;
		for (int j = 0; j < cnt; j++) {
			cin >> t; v.push_back(t);
		}
		input(v);
	}

	solve();

	return 0;
}

 